home *** CD-ROM | disk | FTP | other *** search
- #
- # Demo for Basic geometry.
- #
- # (c) Gershon Elber, July 1995
- #
-
- comment $
- pause = procedure():
- printf("Press return to continue:", nil());
- $
-
- save_mat = view_mat;
-
- #
- # TANGENT of CURVE.
- #
- Crv = cbspline( 3,
- list( ctlpt( E2, 0.2, 0.0 ),
- ctlpt( E2, 0.2, 0.03 ),
- ctlpt( E2, 0.03, 0.03 ),
- ctlpt( E2, 0.03, 0.07 ),
- ctlpt( E2, 0.04, 0.3 ),
- ctlpt( E2, 0.3, 0.3 ),
- ctlpt( E2, 0.4, 0.4 ),
- ctlpt( E2, 0.3, 0.7 ),
- ctlpt( E2, 0.28, 0.7 ) ),
- list( KV_OPEN ) ) * sc( 2.5 ) * tx( -0.4 ) * ty( -0.9 );
- Crv = creparam( Crv, 0, 1 );
- attrib( Crv, "dwidth", 3 );
- color( Crv, red );
-
- DCrv = cDerive( Crv );
-
- view_mat = tz( 0.1 );
- interact( list( Crv, view_mat ) );
-
- Steps = 500;
- for ( i = 0, 1, Steps,
- Pt = cEval( Crv, i / Steps ):
- T = normalize( coerce( cEval( DCrv, i / Steps ), vector_type ) ):
- Pt2 = coerce( coerce( Pt, point_type ) + 0.3 * T, E2 ):
- TanVec = Pt + Pt2:
- color( TanVec, yellow ):
- attrib( TanVec, "dwidth", 5 ):
- viewobj( TanVec ) );
- pause();
-
- #
- # NORMAL of SURFACE.
- #
- Srf = sbspline( 3, 3,
- list ( list( ctlpt( E3, 0.1, 0.0, 1.0 ),
- ctlpt( E3, 0.3, 1.0, 0.0 ),
-
- ctlpt( E3, 0.0, 2.0, 1.0 ) ),
- list( ctlpt( E3, 1.1, 0.0, 0.0 ),
- ctlpt( E3, 1.3, 1.5, 2.0 ),
- ctlpt( E3, 1.0, 2.1, 0.0 ) ),
- list( ctlpt( E3, 2.1, 0.0, 2.0 ),
- ctlpt( E3, 2.3, 1.0, 0.0 ),
- ctlpt( E3, 2.0, 2.0, 2.0 ) ),
- list( ctlpt( E3, 3.1, 0.0, 0.0 ),
- ctlpt( E3, 3.3, 1.5, 2.0 ),
- ctlpt( E3, 3.0, 2.1, 0.0 ) ),
- list( ctlpt( E3, 4.1, 0.0, 1.0 ),
- ctlpt( E3, 4.3, 1.0, 0.0 ),
- ctlpt( E3, 4.0, 2.0, 1.0 ) ) ),
- list( list( KV_OPEN ),
- list( KV_OPEN ) ) );
- attrib( Srf, "dwidth", 3 );
- color( Srf, red );
-
- SrfDu = sderive( Srf, ROW );
- SrfDv = sderive( Srf, COL );
-
- view_mat = save_mat * sc( 0.45 ) * tx( 0.3 ) * ty( 0.2 );
- interact( list( view_mat, Srf ) );
-
- Steps = 100;
- for ( i = 0, 1, Steps,
- u = i / 100:
- v = 3 * sqr( (i - 50) / 50 ):
- Pt = seval( Srf, u, v ):
- Du = normalize( coerce( seval( SrfDu, u, v ), vector_type ) ):
- Dv = normalize( coerce( seval( SrfDv, u, v ), vector_type ) ):
- Nrml = normalize( Dv ^ Du ):
- Ptu = coerce( coerce( Pt, point_type ) + Du * 0.3, e3 ):
- Ptv = coerce( coerce( Pt, point_type ) + Dv * 0.3, e3 ):
- Ptn = coerce( coerce( Pt, point_type ) + Nrml * 0.4, e3 ):
- Vecs = list( Pt + Ptu ):
- snoc( Pt + Ptv, Vecs ):
- color( Vecs, green ):
- attrib( Vecs, "dwidth", 4 ):
- Vec3 = Pt + Ptn:
- color( Vec3, yellow ):
- attrib( Vec3, "dwidth", 5 ):
- view( list( Srf, Vecs, Vec3 ), on ) );
- pause();
-
- #
- # ISOPARAMETRIC CURVE.
- #
- cross = cbspline( 3,
- list( ctlpt( E3, 0.001, 0.0, 0.02 ),
- ctlpt( E3, 0.2, 0.0, 0.02 ),
- ctlpt( E3, 0.22, 0.0, 0. ),
- ctlpt( E3, 0.22, 0.0, 0.03 ),
- ctlpt( E3, 0.03, 0.0, 0.03 ),
- ctlpt( E3, 0.03, 0.0, 0.07 ),
- ctlpt( E3, 0.04, 0.0, 0.3 ),
- ctlpt( E3, 0.3, 0.0, 0.3 ),
- ctlpt( E3, 0.4, 0.0, 0.4 ),
- ctlpt( E3, 0.3, 0.0, 0.7 ),
- ctlpt( E3, 0.28, 0.0, 0.7 ),
- ctlpt( E3, 0.37, 0.0, 0.42 ),
- ctlpt( E3, 0.31, 0.0, 0.32 ),
- ctlpt( E3, 0.001, 0.0, 0.32 ) ),
- list( KV_OPEN ) );
- wglass = surfrev( cross * scale( vector( 1.6, 1.6, 1.6 ) ) );
- color( wglass, red );
- attrib( wglass, "dwidth", 2 );
-
- Iso1 = csurface( wglass, ROW, 7.5 );
- Iso2 = csurface( wglass, COL, 0.5 );
- color( Iso1, yellow );
- color( Iso2, yellow );
- attrib( Iso1, "dwidth", 4 );
- attrib( Iso2, "dwidth", 4 );
-
- view_mat = save_mat * ty( -0.5 );
- interact( list( view_mat, wglass, Iso1, Iso2 ) );
-
- #
- # Srf to polyhedra approximation.
- #
- interact( list( view_mat, wglass ) );
-